﻿using System;
using System.Web.UI;
using System.Web.UI.WebControls;
using System.Web.Security;
using SGAEntidades;
using System.Text;
using SGALogicaNegocio;
using System.Collections.Generic;

namespace webSGA
{
    public partial class wfSolicitudTelefonia : System.Web.UI.Page
    {
        protected void Page_Load(object sender, EventArgs e)
        {
            if (!IsPostBack)
            {
                lblUsuario.Text = Context.User.Identity.Name;
                Util.Util.CargarMotivoSolicitudTelefonia(cboMotivoSolicitud, true);
                Util.Util.CargarEstadoSolicitud(cboEstadoSolicitud, true);
                Util.Util.CargarOperadorTelefonia(cboOperador, true);
                Util.Util.CargarTipoTelefono(cboTipoEquipo, true);
                hfAccion.Value = "N";
                btnGrabar.Enabled = true;
                cboEstadoSolicitud.SelectedValue = "01";
            }
        }

        protected void btnCerrarSesion_Click(object sender, EventArgs e)
        {
            FormsAuthentication.SignOut();
            Response.Redirect("Login.aspx");
        }

        protected void btnNuevo_Click(object sender, EventArgs e)
        {
            ActivarDesactivarCampos(true);
            hfAccion.Value = "N";
            LimpiarCampos();
            txtIdSolicitud.Enabled = false;
        }

        protected void btnGrabar_Click(object sender, EventArgs e)
        {
            try
            {
                MostrarModalConfirmacion();
            }
            catch (Exception ex)
            {
                Util.Util.AlternarMensaje(false, "Ocurrió el siguiente error: " + ex.Message, alertaError, alertaExito,
                                                  lblError, lblExito);
            }
        }

        protected void btnEditar_Click(object sender, EventArgs e)
        {
            ActivarDesactivarCampos(true);
            hfAccion.Value = "M";
        }

        protected void btnCancelar_Click(object sender, EventArgs e)
        {
            if (hfAccion.Value.Equals("N"))
            {
                LimpiarCampos();
                ActivarDesactivarCampos(false);
            }
            else
                ActivarDesactivarCampos(false);
            hfAccion.Value = "";
        }

        protected void btnAprobar_Click(object sender, EventArgs e)
        {
            try
            {
                hfAccion.Value = "A";
                MostrarModalConfirmacion();
            }
            catch (Exception ex)
            {
                Util.Util.AlternarMensaje(false, "Ocurrió el siguiente error: " + ex.Message, alertaError, alertaExito,
                                                  lblError, lblExito);
            }

        }

        protected void btnBuscarEmpleado_Click(object sender, EventArgs e)
        {
            var oEntEmpleado = new Empleado().Consultar(new EmpleadoInfo("00001"));

            if (!String.IsNullOrEmpty(oEntEmpleado.IdEmpleado))
            {
                txtIdEmpleado.Text = oEntEmpleado.IdEmpleado;
                txtNombreEmpleado.Text = oEntEmpleado.Nombre;
                txtAreaEmpleado.Text = oEntEmpleado.Area.Descripcion;
            }
            else
            {
                Util.Util.AlternarMensaje(false, "No se encontró al empledo indicado.", alertaError, alertaExito, lblError, lblExito);
            }
        }

        protected void cboOperador_SelectedIndexChanged(object sender, EventArgs e)
        {
            Util.Util.CargarPlanTelefonia(cboPlan, cboOperador, true);
        }

        private void ActivarDesactivarCampos(Boolean bEstado)
        {
            txtIdSolicitud.Enabled = bEstado;
            cboEstadoSolicitud.Enabled = bEstado;
            txtFechaSolicitud.Enabled = bEstado;
            cboMotivoSolicitud.Enabled = bEstado;
            cboOperador.Enabled = bEstado;
            cboTipoEquipo.Enabled = bEstado;
            cboPlan.Enabled = bEstado;
            txtMinutosAdicionales.Enabled = bEstado;
            txtSmsAdicionales.Enabled = bEstado;
            txtMbInternetAdicionales.Enabled = bEstado;
            txtObservaciones.Enabled = bEstado;
            btnGrabar.Enabled = bEstado;
        }

        private void LimpiarCampos()
        {
            txtIdSolicitud.Text = "";
            cboEstadoSolicitud.SelectedValue = "01";
            txtIdEmpleado.Text = "";
            txtNombreEmpleado.Text = "";
            txtAreaEmpleado.Text = "";
            txtFechaSolicitud.Text = DateTime.Now.ToShortDateString();
            cboMotivoSolicitud.SelectedValue = "-1";
            cboOperador.SelectedValue = "-1";
            cboTipoEquipo.SelectedValue = "-1";
            cboPlan.Items.Clear();
            txtMinutosAdicionales.Text = "0";
            txtSmsAdicionales.Text = "0";
            txtMbInternetAdicionales.Text = "0";
            txtObservaciones.Text = "";
        }

        protected void btnSiGrabar_Click(object sender, EventArgs e)
        {
            GrabarSolicitud();
        }

        private void GrabarSolicitud()
        {
            var oEntSolicitud = new SolicitudTelefoniaInfo();
            var sIdSolicitud = "";

            if (String.IsNullOrEmpty(txtIdEmpleado.Text))
            {
                Util.Util.AlternarMensaje(false, "Debe seleccionar el empleado.", alertaError, alertaExito, lblError, lblExito);
                return;
            }

            if (!Util.Util.EsFechaValida(txtFechaSolicitud.Text))
            {
                Util.Util.AlternarMensaje(false, "La fecha de la solicitud no tiene un formato válido. Debe ser dd/mm/yyyy.", alertaError, alertaExito, lblError, lblExito);
                return;
            }

            //if (cboMotivoSolicitud.SelectedValue.Equals("-1"))
            //{
            //    Util.Util.AlternarMensaje(false, "Debe seleccionar un motivo de solicitud.", alertaError, alertaExito, lblError, lblExito);
            //    return;
            //}

            if (cboOperador.SelectedValue.Equals("-1"))
            {
                Util.Util.AlternarMensaje(false, "Debe seleccionar un operador.", alertaError, alertaExito, lblError, lblExito);
                return;
            }

            if (cboTipoEquipo.SelectedValue.Equals("-1"))
            {
                Util.Util.AlternarMensaje(false, "Debe seleccionar un tipo de equipo.", alertaError, alertaExito, lblError, lblExito);
                return;
            }

            if (cboPlan.SelectedValue.Equals("-1"))
            {
                Util.Util.AlternarMensaje(false, "Debe seleccionar un plan de telefonía.", alertaError, alertaExito, lblError, lblExito);
                return;
            }

            if (!String.IsNullOrEmpty(txtMinutosAdicionales.Text))
            {
                if (!Util.Util.EsNumerico(txtMinutosAdicionales.Text))
                {
                    Util.Util.AlternarMensaje(false, "Debe ingresar una cantidad de minutos adicionales válida.", alertaError, alertaExito, lblError, lblExito);
                    return;
                }
                if (Int32.Parse(txtMinutosAdicionales.Text) < 0)
                {
                    Util.Util.AlternarMensaje(false, "Debe ingresar una cantidad de minutos adicionales mayor o igual a cero.", alertaError, alertaExito, lblError, lblExito);
                    return;
                }
            }

            if (!String.IsNullOrEmpty(txtSmsAdicionales.Text))
            {
                if (!Util.Util.EsNumerico(txtSmsAdicionales.Text))
                {
                    Util.Util.AlternarMensaje(false, "Debe ingresar una cantidad de SMS adicionales válida.", alertaError, alertaExito, lblError, lblExito);
                    return;
                }
                if (Int32.Parse(txtSmsAdicionales.Text) < 0)
                {
                    Util.Util.AlternarMensaje(false, "Debe ingresar una cantidad de SMS mayor o igual a cero.", alertaError, alertaExito, lblError, lblExito);
                    return;
                }
            }

            if (!String.IsNullOrEmpty(txtMbInternetAdicionales.Text))
            {
                if (!Util.Util.EsNumerico(txtMbInternetAdicionales.Text))
                {
                    Util.Util.AlternarMensaje(false, "Debe ingresar una cantida de Megabytes para Internet adicionales válida.", alertaError, alertaExito, lblError, lblExito);
                    return;
                }
                if (Int32.Parse(txtMbInternetAdicionales.Text) < 0)
                {
                    Util.Util.AlternarMensaje(false, "Debe ingresar una cantidad de Megabytes mayor o igual a cero.", alertaError, alertaExito, lblError, lblExito);
                    return;
                }
            }

            if (hfAccion.Value.Equals("A"))
            {
                if (cboEstadoSolicitud.SelectedValue.Equals("03"))
                {
                    Util.Util.AlternarMensaje(false, "La hoja de ruta ya se encuentra aprobada", alertaError, alertaExito, lblError, lblExito);
                    return;
                }
            }

            oEntSolicitud.IdEmpleado = txtIdEmpleado.Text;
            oEntSolicitud.IdEstadoSolicitud = cboEstadoSolicitud.SelectedValue;
            oEntSolicitud.FechaSolicitud = Convert.ToDateTime(txtFechaSolicitud.Text);
            oEntSolicitud.IdMotivoSolicitud = cboMotivoSolicitud.SelectedValue.Equals("-1") ? null : cboMotivoSolicitud.SelectedValue;
            oEntSolicitud.IdOperadorTelefonia = cboOperador.SelectedValue;
            oEntSolicitud.IdTipoTelefono = cboTipoEquipo.SelectedValue;
            oEntSolicitud.IdPlanTelefonia = cboPlan.SelectedValue;
            oEntSolicitud.MinutosAdicionalesLinea = String.IsNullOrEmpty(txtMinutosAdicionales.Text) ? 0 : Int32.Parse(txtMinutosAdicionales.Text);
            oEntSolicitud.SmsAdicionales = String.IsNullOrEmpty(txtSmsAdicionales.Text) ? 0 : Int32.Parse(txtSmsAdicionales.Text);
            oEntSolicitud.MbAdicionales = String.IsNullOrEmpty(txtMbInternetAdicionales.Text) ? 0 : Int32.Parse(txtMbInternetAdicionales.Text);
            oEntSolicitud.UsuarioSistema = Context.User.Identity.Name;
            oEntSolicitud.Observaciones = txtObservaciones.Text;

            if (hfAccion.Value.Equals("N"))
            {
                if (new SolicitudTelefonia().Registrar(oEntSolicitud, ref sIdSolicitud))
                {
                    Util.Util.AlternarMensaje(true, "Se registró la solicitud con éxito.", alertaError, alertaExito,
                                              lblError, lblExito);
                    txtIdSolicitud.Text = sIdSolicitud;
                    ActivarDesactivarCampos(false);
                    CargarSolicitud(txtIdSolicitud.Text);
                }
                else
                {
                    Util.Util.AlternarMensaje(false, "No se registró la solicitud.", alertaError, alertaExito,
                          lblError, lblExito);
                }
            }
            if (hfAccion.Value.Equals("M"))
            {
                oEntSolicitud.IdSolicitudTelefonia = txtIdSolicitud.Text;
                if (new SolicitudTelefonia().Actualizar(oEntSolicitud))
                {
                    Util.Util.AlternarMensaje(true, "Se actualizó la solicitud con éxito.", alertaError, alertaExito,
                                              lblError, lblExito);
                    ActivarDesactivarCampos(false);
                    CargarSolicitud(txtIdSolicitud.Text);
                }
                else
                {
                    Util.Util.AlternarMensaje(false, "No se actualizó la solicitud.", alertaError, alertaExito,
                          lblError, lblExito);
                }
            }
            if (hfAccion.Value.Equals("A"))
            {
                oEntSolicitud.IdSolicitudTelefonia = txtIdSolicitud.Text;
                oEntSolicitud.IdEstadoSolicitud = "03";
                oEntSolicitud.UsuarioAprobacion = Context.User.Identity.Name;
                if (new SolicitudTelefonia().Aprobar(oEntSolicitud))
                {
                    Util.Util.AlternarMensaje(true, "Se aprobó la solicitud con éxito.", alertaError, alertaExito,
                                              lblError, lblExito);
                    ActivarDesactivarCampos(false);
                    CargarSolicitud(txtIdSolicitud.Text);
                }
                else
                {
                    Util.Util.AlternarMensaje(false, "No se aprobó la solicitud.", alertaError, alertaExito,
                          lblError, lblExito);
                }
            }
        }

        private void MostrarModalConfirmacion()
        {
            var sb = new StringBuilder();
            sb.Append(@"<script type='text/javascript'>");
            sb.Append("$('#modalConfirmacion').modal('show');");
            sb.Append(@"</script>");
            ClientScript.RegisterStartupScript(GetType(), "Show", sb.ToString());
            ScriptManager.RegisterClientScriptBlock(this, GetType(), "ModalScript", sb.ToString(), false);
        }

        protected void btnBuscarSolicitud_Click(object sender, EventArgs e)
        {
            //if (!String.IsNullOrEmpty(txtIdSolicitud.Text))
            //{
            //    CargarSolicitud(txtIdSolicitud.Text);
            //    ActivarDesactivarCampos(false);
            //}
            //else
            //{
            //    Util.Util.AlternarMensaje(false, "No se indicó un código de solicitud para mostrar.", alertaError, alertaExito,
            //  lblError, lblExito);
            //}
            gvConsultaSolicitud.DataSource = null;
            var sb = new StringBuilder();
            sb.Append(@"<script type='text/javascript'>");
            sb.Append("$('#modalBusquedaSolicitud').modal('show');");
            sb.Append(@"</script>");
            ClientScript.RegisterStartupScript(GetType(), "Show", sb.ToString());
            ScriptManager.RegisterClientScriptBlock(this, GetType(), "ModalScript", sb.ToString(), false);
        }

        private void CargarSolicitud(String sIdSolicitud)
        {
            var oEntSolicitud = new SolicitudTelefoniaInfo(sIdSolicitud, null);
            oEntSolicitud = new SolicitudTelefonia().Consultar(oEntSolicitud);

            if (oEntSolicitud.IdEmpleado != null)
            {
                txtIdSolicitud.Text = oEntSolicitud.IdSolicitudTelefonia;
                txtIdEmpleado.Text = oEntSolicitud.IdEmpleado;
                txtNombreEmpleado.Text = oEntSolicitud.Empleado.Nombre;
                txtAreaEmpleado.Text = oEntSolicitud.Empleado.Area.Descripcion;
                if (oEntSolicitud.FechaSolicitud != null)
                    txtFechaSolicitud.Text = oEntSolicitud.FechaSolicitud.Value.ToShortDateString();
                cboEstadoSolicitud.SelectedValue = oEntSolicitud.IdEstadoSolicitud;
                cboOperador.SelectedValue = oEntSolicitud.IdOperadorTelefonia;
                Util.Util.CargarPlanTelefonia(cboPlan, cboOperador, true);
                cboMotivoSolicitud.SelectedValue = oEntSolicitud.IdMotivoSolicitud;
                cboPlan.SelectedValue = oEntSolicitud.IdPlanTelefonia;
                cboTipoEquipo.SelectedValue = oEntSolicitud.IdTipoTelefono;
                txtMinutosAdicionales.Text = oEntSolicitud.MinutosAdicionalesLinea.ToString();
                txtSmsAdicionales.Text = oEntSolicitud.SmsAdicionales.ToString();
                txtMbInternetAdicionales.Text = oEntSolicitud.MbAdicionales.ToString();
                txtObservaciones.Text = oEntSolicitud.Observaciones;
            }
            else
                Util.Util.AlternarMensaje(false, "No se encontró la solicitud indicada.", alertaError, alertaExito,
                                          lblError, lblExito);
        }

        protected void btnConsultar_Click(object sender, EventArgs e)
        {
            String sIdSolicitud = String.IsNullOrEmpty(txtSolicitudBusqueda.Text.Trim())
                                      ? null
                                      : txtSolicitudBusqueda.Text.Trim();
            String sEmpleado = String.IsNullOrEmpty(txtEmpleadoBusqueda.Text.Trim())
                                   ? null
                                   : txtEmpleadoBusqueda.Text.Trim();
            DateTime? dFechaSolicitudDesde;
            DateTime? dFechaSolicitudHasta;
            if (String.IsNullOrEmpty(txtFechaBusquedaDesde.Text.Trim()))
                dFechaSolicitudDesde = null;
            else
                dFechaSolicitudDesde = DateTime.Parse(txtFechaBusquedaDesde.Text.Trim());

            if (String.IsNullOrEmpty(txtFechaBusquedaHasta.Text.Trim()))
                dFechaSolicitudHasta = null;
            else
                dFechaSolicitudHasta = DateTime.Parse(txtFechaBusquedaHasta.Text.Trim());

            var oResultado = new SolicitudTelefonia().Listar(new SolicitudTelefoniaInfo(sIdSolicitud, sEmpleado, dFechaSolicitudDesde,
                                                                           dFechaSolicitudHasta));
            if (oResultado.Count == 0)
                oResultado.Add(new SolicitudTelefoniaInfo());

            gvConsultaSolicitud.DataSource = oResultado;

            gvConsultaSolicitud.DataBind();
        }

        protected void gvConsultaSolicitud_RowCommand(object sender, GridViewCommandEventArgs e)
        {
            try
            {
                int index = Convert.ToInt32(e.CommandArgument);
                var dataKey = gvConsultaSolicitud.DataKeys[index];
                String sIdSolicitud = "";
                if (dataKey != null)
                {
                    sIdSolicitud = dataKey.Value.ToString();
                }

                if (e.CommandName.Equals("Seleccionar"))
                {
                    CargarSolicitud(sIdSolicitud);
                    ActivarDesactivarCampos(false);

                    var sb = new StringBuilder();
                    sb.Append(@"<script type='text/javascript'>");
                    sb.Append("$('#modalBusquedaSolicitud').modal('hide');");
                    sb.Append(@"</script>");
                    ClientScript.RegisterStartupScript(GetType(), "Hide", sb.ToString());
                    ScriptManager.RegisterClientScriptBlock(this, GetType(), "ModalScript", sb.ToString(), false);
                }
            }
            catch (Exception ex)
            {
                Util.Util.AlternarMensaje(false, "Ocurrió un error: " + ex.Message, alertaError, alertaExito, lblError, lblExito);
            }
        }
    }
}